ํฃํฃํฃ
์ง๊ธ๋ถํฐ ๊ฐ ์น์
๋ง๋ค ๋์ค๋ ํฐ๋ฏธ๋ ๋ช
๋ น์ด ๋งจ ์์ $
๊ธฐํธ๋ command line ์์ ์๋ ค์ฃผ๋ ํ์์ด๋ค.
๋ฐ๋ผ์ ํฐ๋ฏธ๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ ๋๋ $
๊ธฐํธ๋ ๋ฌด์ํ๋ฉด ๋๋ค.
์์ :
$ git XXXX
์ฐธ๊ณ ๋ก, Git์ ๋ชจ๋ ๋ช
๋ น์ด๋ $ git
์ผ๋ก ์์ํ๋ค.
$ git init
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด .git
์ด๋ผ๋ ์จ๊น ํด๋๊ฐ ์๊ธด๋ค.
$ ls -al
$ git status
name.file
)์ ์ด๋์ํค๊ณ ์ถ๋ค๋ฉด
$ git add name.file
$ git add .
add.
์ด ์๋๋ผ add .
์ด๋ค.$ git rm --cached name.file
$ git commit -m "commit message"
$ git commit
์ผ๋ก commit message ์์ฑ ์ฐฝ์ผ๋ก ๋์ด๊ฐ ํ ์์ธํ ์์ฑํ ์ ์๋ค.
$ git log
^Z (Ctrl+Z)
๋ก ๋น ์ ธ๋์ฌ ์ ์๋ค.
$ git commit -am "commit message"
๋จ, ํ ๋ฒ ์ด๋ผ๋ commit์ ํ ๋์์ ๋ํด์๋ง ๊ฐ๋ฅํ๋ค.
$ git remote add origin https://github.com/oneonlee/git_test.git
# ์๊ฒฉ ์ ์ฅ์์ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๋ช
๋ น์ด์ด๋ค. (๋ก์ปฌ ์ ์ฅ์์ ์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ฑ๋ก)
$ git branch -M main
# main branch๋ฅผ ์์ฑํ๋ ๋ช
๋ น์ด์ด๋ค.
$ git push -u origin main
# ๋ง ๊ทธ๋๋ก pushํ๋ ๋ช
๋ น์ด์ด๋ค.
error: origin ๋ฆฌ๋ชจํธ๊ฐ ์ด๋ฏธ ์์ต๋๋ค.
$ git remote rm origin
์ ํตํด remote origin์ ์ญ์ ํด์ฃผ๊ณ ,
$ git remote add origin https://github.com/oneonlee/git_test.git
๋ฅผ ์ ๋ ฅํ๋ค.
error: ๋ ํผ๋ฐ์ค๋ฅผ โhttps://github.com/oneonlee/git_test.gitโ์ ํธ์ํ๋๋ฐ ์คํจํ์ต๋๋ค
ํํธ: ํ์ฌ ๋ธ๋์น์ ๋์ด ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ณด๋ค ๋ค์ ์์ผ๋ฏ๋ก ์ ๋ฐ์ดํธ๊ฐ ๊ฑฐ๋ถ๋์์ต๋๋ค. ํธ์ํ๊ธฐ ์ ์ (โgit pull โฆโ ๋ฑ ๋ช ๋ น์ผ๋ก) ๋ฆฌ๋ชจํธ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ์ญ์์ค.
ํํธ: ์์ธํ ์ ๋ณด๋ โgit push โhelpโ์ โNote about fast-forwardsโ ๋ถ๋ถ์ ์ฐธ๊ณ ํ์ญ์์ค.
$ git push origin main -- force
push
๋ค์ -- force
๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด, ๊ณผ๊ฑฐ commit ๋ด์ญ๊ณผ ์๊ด์์ด ์ง๊ธ ํ์ฌ commit ๋ด์ฉ์ผ๋ก ๋ฎ์ด์์ ๋ฒ๋ฆฌ๋ ๋ช
๋ น์ด์ด๋ค.--force
์ต์
์ ์คํํ๊ฒ ๋๋ฉด ๊ธฐ์กด repository์ commit ๋ชจ๋ ์ญ์ ๋๊ณ , ํ์ฌ ๋ด๊ฐ ์์
ํ commit ๋ด์ญ๋ค๋ง ๋จ๊ธฐ ๋๋ฌธ์ ์ ์ํด์ผ ํ๋ค.Working directory, Staging area, Repository์ ์ฌ๋ฆฐ ๋ด์ฉ์ ์ด๋ป๊ฒ ์ทจ์ํ ์ ์์๊น?
git reset
$ git reset --hard HEAD^
$ git reset --mixed HEAD^
# or
$ git reset
$ git reset --soft HEAD^
HEAD
์ ์๋ฏธ : ๊ฐ์ฅ ์ต๊ทผ ๋ฒ์ ์์ (ํ์ฌ ์์
์ค์ธ ๋ธ๋์น/์ปค๋ฐ ์ค ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค.)^
์ ์๋ฏธ : ํ๋ ๋๋๋ฆฌ์
^^
: ๋ ๊ฐ ์ ์ผ๋กgit reset
๋ช
๋ น์ด๋ ํ ๋ฒ ์ด์์ commit ๋ด์ญ์ด ์์ด์ผ ์๋ํ๋ค.git revert
git revert
๋ git reset
๊ณผ ๋์ผํ๊ฒ commit์ ๋๋๋ฆฌ๋ ๋ช
๋ น์ด์ด๋ค.
$ git revert <๋๋์๊ฐ๊ณ ์ถ์ commit>
revert
ํ๊ณ ์ถ๋ค๋ฉด
$ git revert de6d5c1148981e15617999c7ecaa6ec2ea21ff29
reset
๊ณผ revert
์ ์ฐจ์ด์ git reset
๊ณผ git revert
๋ commit์ ๊ณผ๊ฑฐ ์์ ์ผ๋ก ๋๋๋ ค์ค๋ค๋ ์ ์์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ง๋ง, ์ฐจ์ด์ ์ ๋๋๋ฆฌ๋ commit๊น์ง์ ์ด๋ ฅ์ด ์ฌ๋ผ์ง๋๋์ ์ฌ๋ถ์ ์๋ค.
git reset
์ ๋๋๋ฆฐ ๋ฒ์ ์ดํ์ ๋ฒ์ ๋ค์ด ๋ชจ๋ ์ฌ๋ผ์ง๊ฒ ๋์ง๋ง, git revert
๋ ๋๋๋ฆฐ ๋ฒ์ ์ดํ์ ๋ฒ์ ๋ค์ ๋ชจ๋ ์ ์ง๋๊ณ , revert๋์๋ค๋ ์ฌ์ค์ ๋ด์ commit๋ง ์๋ก ์ถ๊ฐ๋๋ค.
์๋ ์์ ์์ 3๋ฒ commit์ผ๋ก reset์ ํ๋ฉด 4, 5๋ฒ commit์ ์ญ์ ๋์ง๋ง, 3๋ฒ commit์ผ๋ก revert๋ฅผ ํ๋ฉด 4,5๋ฒ commit์ ๊ทธ๋๋ก ์ ์ง๋๋ค.
์ฆ, reset
์ ๊ณผ๊ฑฐ ์์ฒด๋ฅผ ๋ฐ๊พธ๋ ๋ช
๋ น์ด์ด๊ณ , revert
๋ ๊ณผ๊ฑฐ๋ฅผ ๋ณ๊ฒฝ์์ผฐ๋ค๋ ์๋ก์ด commit์ผ๋ก์จ ์๋ก์ด commit์ ๋ง๋๋ ๋ช
๋ น์ด๋ค.
์ค์ฉ์ ์ธ ๋ฉด์ผ๋ก ๋ฐ์ ธ ๋ณด์์ ๋, revert
๋ reset
๋ณด๋ค ๋ ์์ ํ๊ฒ commit์ ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๊ณ , reset
์ revert
๋ณด๋ค commit log๋ฅผ ๊น๋ํ๊ฒ ์ ์งํด์ฃผ๋ฉฐ commit์ ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
์ด ๊ธ์์๋ ์ผ๋ฐ์ ์ธ ๊ด์ ์์ reset๊ณผ ๋น๊ตํ์ ๋์ ์ด์ผ๊ธฐ์ด๊ธด ํ์ง๋ง,
-n
์ต์ ์ ์ด์ฉํ๋ฉด revert๋ฅผ ์จ๋ commit์ ๋จ๊ธฐ์ง ์์ ์๋ ์๋ค.
$ git branch
$ git branch <๋ธ๋์น ์ด๋ฆ>
$ git checkout <๋ธ๋์น ์ด๋ฆ>
$ git checkout -b <๋ธ๋์น ์ด๋ฆ>
(๋ง์ฝ์ โmy_branchโ๋ผ๋ branch๋ฅผ โmainโ์ ํฉ์น๋ ค๊ณ ํ๋ค๋ฉด,)
checkout
$ git checkout main
$ # git merge <ํฉ์น๋ ค๋ branch>
$ git merge my_branch
$ git diff
git diff
๋ ๋ณ๊ฒฝ๋ด์ญ๋ค๋ผ๋ฆฌ์ ๋น๊ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
git diff
์ด๋ค. ๋ง๊ทธ๋๋ก ํจ์น ๊ฐ์ ์ฐจ์ด์ ์ ์ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค.์๋ฅผ ๋ค์ด ํ์ฌ ์ ์ฅ์์ ํ์ผ์ด test.txt
๋ฌ๋ ํ๋ ์๊ณ , 1๋ฒ๋ถํฐ 5๋ฒ commit์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ commit์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
git log
๋ฅผ ํตํด commit ๋ด์ญ๋ค์ ํ์ธํ ์ ์๋ค.
$ git log
commit f7fe32715c4bd705110196134271d8f873384316 (HEAD -> master)
Author: Lee Dong-geon <peter8739@gmail.com>
Date: Tue Dec 1 23:06:03 2020 +0900
5
commit 2845ce53054627b3381c9f2515dc7545cff2347b
Author: Lee Dong-geon <peter8739@gmail.com>
Date: Tue Dec 1 23:05:49 2020 +0900
4
commit de6d5c1148981e15617999c7ecaa6ec2ea21ff29
Author: Lee Dong-geon <peter8739@gmail.com>
Date: Tue Dec 1 23:05:38 2020 +0900
3
commit 1d7fce052aafb388ddf092ea315835f5154683f7
Author: Lee Dong-geon <peter8739@gmail.com>
Date: Tue Dec 1 23:04:52 2020 +0900
2
commit 6958b6b21e15aa0be36736016c5bc955b57a61be
Author: Lee Dong-geon <peter8739@gmail.com>
Date: Tue Dec 1 23:04:38 2020 +0900
1
commit ์์ ๋ง๊ตฌ์ก์ด๋ก ์๊ธด ๋ฌธ์์ด (f7fe32715c4bd705110196134271d8f873384316 ๋ฑ๋ฑโฆ) ์ ๊ฐ๊ฐ์ commit์ ๋ํ๋ด๋ commit hash์ด๋ค. ์ด commit์ ๊ฐ๋ฆฌํค๋ ๋ง์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
$ git diff <๋น๊ต๋์ commit> <๊ธฐ์ค commit>
# ์ฝ๊ฒ ๋งํ๋ฉด
$ git diff <์ด commit์ ๋นํด> <์ด commit์ ๋ฌด์์ด ๋ฌ๋ผ์ก๋?>
<!-- - ์ฌ๊ธฐ์๋, `$ $ git diff f7fe32715c4bd705110196134271d8f873384316 2845ce53054627b3381c9f2515dc7545cff2347b` -->
$ git diff 2845ce53054627b3381c9f2515dc7545cff2347b f7fe32715c4bd705110196134271d8f873384316
diff --git a/test.txt b/test.txt
index 8422d40..8fda00d 100644
--- a/test.txt
+++ b/test.txt
@@ -2,3 +2,4 @@ A
B
C
D
+E # 4๋ฒ Commit์ ๋นํด E๋ผ๋ ๋ฌธ์์ด์ด ์ถ๊ฐ๋์๋ค(+ ํ์)
๋งค๋ฒ ์ด๋ ๊ฒ commit hash๋ฅผ ์ฐ๋๊ฒ ๊ท์ฐฎ์ผ๋ฏ๋ก, HEAD
๋ฅผ ์ด์ฉํด ์๋์ ๊ฐ์ด ์ฌ์ฉํด๋ ๋๋ค.
HEAD๋ ํ์ฌ branch์ ๊ฐ์ฅ ์ต๊ทผ commit, HEAD^
๋ ํ์ฌ branch์ ๊ฐ์ฅ ์ต๊ทผ commit์์ ํ๋ ์ด์ commit์ ๊ฐ๋ฆฌํค๋ฏ๋ก,
$ git diff HEAD HEAD^
๋ ์ด์ commit (5๋ฒ)๊ณผ ์ ์ commit (4๋ฒ)์ ๋น๊ตํ๋ผ๋ ๋ช
๋ น์ด๋ค.
$ git diff HEAD^ HEAD
diff --git a/test.txt b/test.txt
index 8422d40..8fda00d 100644
--- a/test.txt
+++ b/test.txt
@@ -2,3 +2,4 @@ A
B
C
D
+E
์์ง commitํ์ง ์์, ์์ ๋ ๋ด์ฉ๊ณผ ์ด์ commit (์ด ์์ ์์๋ 5๋ฒ commit)๊ณผ ๋น๊ตํ๊ธฐ ์ํด git diff HEAD
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด test.txt
์ F๋ผ๋ ๋ฌธ์๋ฅผ ์ถ๊ฐํ๊ณ , $ git diff HEAD
๋ฅผ ์น๋ค๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
$ git diff HEAD
diff --git a/test.txt b/test.txt
index 8fda00d..cead32e 100644
--- a/test.txt
+++ b/test.txt
@@ -3,3 +3,4 @@ B
C
D
E
+F
์ฆ, ์์ง commitํ์ง ์์ ํ์ฌ ์์ ์ค์ธ ๋ด์ฉ์ ๊ฐ์ฅ ์ต๊ทผ commitํ ๋ด์ฉ๊ณผ ๋น๊ตํ ๊ฒฐ๊ณผ๋ผ๊ณ ๋ณผ ์ ์๋ค.
$ git diff <๋น๊ต๋์ branch์ด๋ฆ> origin/<branch ์ด๋ฆ>
$ git diff <๋น๊ต๋์ branch ์ด๋ฆ> <๊ธฐ์ค branch ์ด๋ฆ>
Branch ๊ฐ๋ ์ ์๊ฒฉ์ ์ฅ์ (GitHub)์ ์ ๋ชฉ์์ผ ์ค์ง์ ์ธ ํ์ ์ ์ด๋ฃจ๊ธฐ
git remote
: ์๊ฒฉ์ ์ฅ์์ ์กฐํ(์ถ๊ฐ) ํ๊ธฐ๋ด ๋ก์ปฌ repository์ ์ํธ์์ฉํ๊ณ ์๋ (ํน์ ํ ์ ์๋) ์๊ฒฉ ์ ์ฅ์๋ค์ ๋ชฉ๋ก์ ์กฐํ
$ git remote -v`
$ git remote add <๋จ์ถ์ด๋ฆ> <url>
origin
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ถ๊ฐํ๊ธฐ$ git remote add origin <url>
$ git remote rm <๋จ์ถ์ด๋ฆ>
git push
: ์๊ฒฉ์ ์ฅ์์ ๋ฐ์ด๋ฃ๊ธฐ$ git push -u origin main
-u
: ๋ํดํธ ์ค์ (main ๋ธ๋์น๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํด์ค)
$ git push
๋ง ์จ๋ push๊ฐ ๋๋ค.git pull
: ์๊ฒฉ์ ์ฅ์ ๊ฐ๊ณ ์์ ํฉ์น๊ธฐ$ git pull origin main
origin์ ๋ด repository์ main ๋ธ๋์น๋ก ๊ฐ๊ณ ์๋ผ (merge)
git fetch
: ์๊ฒฉ์ ์ฅ์ ์ผ๋จ ๊ฐ๊ณ ๋ง ์ค๊ธฐgit fetch origin
origin
์ ๋ด repository์ main ๋ธ๋์น๋ก ์ผ๋จ ๊ฐ๊ณ ์๋ผorigin
์ ๋ช
๋ น์ด๊ฐ ์๋๋ผ ์์์ ์ด๋ฆ์ด๋ค.rb92303..73b393f master -> origin/main
์ด๋ผ๊ณ ๋จ๋ฉด origin/main
์์ ํ์ธ ๊ฐ๋ฅ$ git branch
๋ก๋ ํ์ธํ ์ ์๋ค.$ git checkout origin/main
# or
$ git checkout FETCH_HEAD
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅ ํ, ๋ก์ปฌ ์ ์ฅ์๋ฅผ ๋ณด๋ฉด ๋ฐ๋ ํ์ผ์ ํ์ธํ ์ ์๋ค.
$ git checkout main
์ผ๋ก ๋ค์ ์๋ ์๋ main์ผ๋ก ๋์์ฌ ์ ์๋ค.
git clone
: ์๊ฒฉ์ ์ฅ์ ๋ณต์ฌํ๊ธฐ$ git clone <url>
origin
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์๋ ์์ฑ๊ทธ๋ฅ pushํ๋ฉด ๊ทธ๋ง
$ git pull origin main
์ผ๋ก ๋๊ธฐํ๋ฅผ ์ํจ ๋ค์์ ์ฝ๋๋ฅผ ์์ฑํ ํ, pushํ๊ธฐ
๊ฐ์ฅ ๊ณจ์น ์ํ ์ํฉ์ธ ๋์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ
: ํ์ฌ ๋ด๊ฐ ์์ ํ๊ณ ์๋ branch์ base๋ฅผ ์ฎ๊ธด๋ค.
$ git push origin newbranch
Compare & pull request
๋ฒํผ์ ๋๋ฆ์ผ๋ก์ ๊ฐ๋ฅ$ git branch -d newbranch
์ ๋ช
๋ น์ด๋ก ์ง์์ฃผ๋ ๊ฒ์ด ์ข๋ค.